package api

import (
	"fmt"
	"zinx/mmo_game/pb"
	"zinx/mmo_game/core"
	"zinx/ziface"
	"zinx/znet"
	"github.com/golang/protobuf/proto"
)
//世界聊天 路由业务
type WorldChatApi struct {
	znet.BaseRouter
}

func (*WorldChatApi) Handle(request ziface.IRequest) {
	//1. 将客户端传来的proto协议解码
	msg := &pb.Talk{}
	err := proto.Unmarshal(request.GetData(), msg)
	if err != nil {
		fmt.Println("Talk Unmarshal error ", err)
		return
	}


	//2. 得知当前的消息是从哪个玩家传递来的,从连接属性pid中获取，在server.go里面写入就好了
	pid, err := request.GetConnection().GetProperty("pid")
	//func (c *Connection) GetProperty(key string) (interface{}, error),这个pid是interface{}，空接口，需要断言
	if err != nil {
		fmt.Println("GetProperty pid error", err)
		request.GetConnection().Stop()
		return
	}

	//3. 根据pid得到player对象
	player := core.WorldMgrObj.GetPlayerByPid(pid.(int32)) //这个pid是interface{}，空接口，需要断言
	//4. 让player对象发起聊天广播请求   是向所有在线玩家（并不只是周围九宫格玩家）广播聊天信息，并没指定特定的玩家
	player.Talk(msg.Content)
}